Mission launch and initial algorithm

jamesperet 11 years ago
parent
commit
a0789e6617

+ 3 - 0
Gemfile.lock

@@ -28,6 +28,8 @@ GEM
28 28
     addressable (2.3.6)
29 29
     arel (4.0.2)
30 30
     bcrypt (3.1.7)
31
+    bootstrap-timepicker-rails (0.1.3)
32
+      railties (>= 3.0)
31 33
     builder (3.1.4)
32 34
     coffee-rails (4.0.1)
33 35
       coffee-script (>= 2.2.0)
@@ -142,6 +144,7 @@ PLATFORMS
142 144
   ruby
143 145
 
144 146
 DEPENDENCIES
147
+  bootstrap-timepicker-rails
145 148
   coffee-rails (~> 4.0.0)
146 149
   devise
147 150
   flatstrap-rails

+ 41 - 2
app/controllers/missions_controller.rb

@@ -1,5 +1,5 @@
1 1
 class MissionsController < ApplicationController
2
-  before_action :set_mission, only: [:show, :edit, :update, :destroy]
2
+  before_action :set_mission, only: [:show, :edit, :update, :destroy, :launch]
3 3
   
4 4
   before_action :authenticate_user!
5 5
   
@@ -29,7 +29,7 @@ class MissionsController < ApplicationController
29 29
   # POST /missions.json
30 30
   def create
31 31
     @mission = Mission.new(mission_params)
32
-
32
+    @mission.status = 'Initializing'
33 33
     respond_to do |format|
34 34
       if @mission.save
35 35
         format.html { redirect_to @mission, notice: 'Mission was successfully created.' }
@@ -54,6 +54,45 @@ class MissionsController < ApplicationController
54 54
       end
55 55
     end
56 56
   end
57
+  
58
+  def launch
59
+    @mission.status = 'Launched'
60
+    respond_to do |format|
61
+      if @mission.save
62
+        @users = User.all
63
+        @mission_agents = @mission.mission_agents.all
64
+        @users.each do |user|
65
+          @invited = false
66
+          @mission_agents.each do |agent|
67
+            if agent.user != user
68
+              agent.mission_agent_invites.each do |invite|
69
+                if invite.user == user
70
+                    # user already invited
71
+                    @invited = true
72
+                end
73
+              end
74
+            else
75
+              @invited = true
76
+            end
77
+          end
78
+          if @invited == false
79
+            @mission_agents.each do |agent|
80
+              if agent.user == nil
81
+                agent.user_id = user.id
82
+                agent.mission_agent_invites.create!(:user_id => user.id, :status => 'invited') 
83
+                agent.save
84
+              end
85
+            end
86
+          end
87
+        end
88
+        format.html { redirect_to @mission, notice: 'Mission launched!' }
89
+        format.json { head :no_content }
90
+      else
91
+        format.html { render action: 'edit' }
92
+        format.json { render json: @mission.errors, status: :unprocessable_entity }
93
+      end
94
+    end
95
+  end
57 96
 
58 97
   # DELETE /missions/1
59 98
   # DELETE /missions/1.json

+ 3 - 0
app/models/mission_agent.rb

@@ -3,5 +3,8 @@ class MissionAgent < ActiveRecord::Base
3 3
   belongs_to :user
4 4
   
5 5
   has_many :mission_agent_steps
6
+  has_many :mission_agent_invites
7
+  
6 8
   accepts_nested_attributes_for :mission_agent_steps, allow_destroy:true
9
+  accepts_nested_attributes_for :mission_agent_invites
7 10
 end

+ 4 - 0
app/models/mission_agent_invite.rb

@@ -0,0 +1,4 @@
1
+class MissionAgentInvite < ActiveRecord::Base
2
+  belongs_to :mission_agent
3
+  belongs_to :user
4
+end

+ 1 - 0
app/views/missions/edit.html.erb

@@ -4,3 +4,4 @@
4 4
 
5 5
 <%= link_to 'Show', @mission %> |
6 6
 <%= link_to 'Back', missions_path %>
7
+<%= link_to 'Launch', mission_launch_path %>

+ 19 - 0
app/views/missions/show.html.erb

@@ -25,5 +25,24 @@
25 25
   <%= @mission.agent_search_end %>
26 26
 </p>
27 27
 
28
+<% @agent_number = 1 %>
29
+<% @mission.mission_agents.each do |agent| %>
30
+	<div class="well well-small">
31
+		<h3>Agent <%= @agent_number %></h3>
32
+		<% if agent.user != nil %>
33
+			Name: <%= agent.user.email %><br>
34
+			Status: 
35
+			<% agent.mission_agent_invites.each do |invite| %>
36
+				<% if invite.user = agent.user %>
37
+					<%= invite.status %>
38
+				<% end %>
39
+			<% end %>
40
+		<% else %>
41
+		Agent not found!
42
+		<% end %>
43
+	</div>
44
+	<% @agent_number = @agent_number + 1 %>
45
+<% end %>
46
+
28 47
 <%= link_to 'Edit', edit_mission_path(@mission) %> |
29 48
 <%= link_to 'Back', missions_path %>

+ 2 - 1
config/routes.rb

@@ -3,8 +3,9 @@ AvalancheGame::Application.routes.draw do
3 3
   get "agent/current_missions"
4 4
   get "agent/choose_mission"
5 5
   get "agent/:id" => "agent#agent_profile"
6
+  
7
+  get "missions/:id/launch" => "missions#launch", :as => :mission_launch
6 8
   resources :missions
7
-
8 9
   
9 10
   devise_for :users, :skip => [:sessions, :passwords, :confirmations, :registrations]
10 11
     as :user do

+ 11 - 0
db/migrate/20140824233330_create_mission_agent_invites.rb

@@ -0,0 +1,11 @@
1
+class CreateMissionAgentInvites < ActiveRecord::Migration
2
+  def change
3
+    create_table :mission_agent_invites do |t|
4
+      t.references :user
5
+      t.references :mission_agent
6
+      t.string :status
7
+
8
+      t.timestamps
9
+    end
10
+  end
11
+end

+ 5 - 0
db/migrate/20140824233356_add_invite_to_mission_agent.rb

@@ -0,0 +1,5 @@
1
+class AddInviteToMissionAgent < ActiveRecord::Migration
2
+  def change
3
+    add_reference :mission_agents, :mission_agent_invites, index: true
4
+  end
5
+end

+ 11 - 1
db/schema.rb

@@ -11,7 +11,7 @@
11 11
 #
12 12
 # It's strongly recommended that you check this file into your version control system.
13 13
 
14
-ActiveRecord::Schema.define(version: 20140821183452) do
14
+ActiveRecord::Schema.define(version: 20140824233356) do
15 15
 
16 16
   # These are extensions that must be enabled in order to support this database
17 17
   enable_extension "plpgsql"
@@ -29,6 +29,14 @@ ActiveRecord::Schema.define(version: 20140821183452) do
29 29
   add_index "friendly_id_slugs", ["sluggable_id"], name: "index_friendly_id_slugs_on_sluggable_id", using: :btree
30 30
   add_index "friendly_id_slugs", ["sluggable_type"], name: "index_friendly_id_slugs_on_sluggable_type", using: :btree
31 31
 
32
+  create_table "mission_agent_invites", force: true do |t|
33
+    t.integer  "user_id"
34
+    t.integer  "mission_agent_id"
35
+    t.string   "status"
36
+    t.datetime "created_at"
37
+    t.datetime "updated_at"
38
+  end
39
+
32 40
   create_table "mission_agent_steps", force: true do |t|
33 41
     t.integer  "mission_agent_id"
34 42
     t.integer  "step"
@@ -52,8 +60,10 @@ ActiveRecord::Schema.define(version: 20140821183452) do
52 60
     t.boolean  "anonymous_agent"
53 61
     t.datetime "created_at"
54 62
     t.datetime "updated_at"
63
+    t.integer  "mission_agent_invites_id"
55 64
   end
56 65
 
66
+  add_index "mission_agents", ["mission_agent_invites_id"], name: "index_mission_agents_on_mission_agent_invites_id", using: :btree
57 67
   add_index "mission_agents", ["mission_id"], name: "index_mission_agents_on_mission_id", using: :btree
58 68
   add_index "mission_agents", ["user_id"], name: "index_mission_agents_on_user_id", using: :btree
59 69
 

+ 9 - 0
test/fixtures/mission_agent_invites.yml

@@ -0,0 +1,9 @@
1
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+one:
4
+  user: 
5
+  status: MyString
6
+
7
+two:
8
+  user: 
9
+  status: MyString

+ 7 - 0
test/models/mission_agent_invite_test.rb

@@ -0,0 +1,7 @@
1
+require 'test_helper'
2
+
3
+class MissionAgentInviteTest < ActiveSupport::TestCase
4
+  # test "the truth" do
5
+  #   assert true
6
+  # end
7
+end